//
// Created by Jisam on 2024/7/13.
//
#include <bits/stdc++.h>
#define i64 long long // 定义长整型的别名

using namespace std;

const int N = 1e5 + 5; // 定义矩阵的大小
int ans; // 全局变量，用于存储答案
int n; // 矩阵的维度
int dx[] = {-1, 1, 0, 0}; // 定义四个方向的行移动量
int dy[] = {0, 0, -1, 1}; // 定义四个方向的列移动量

/**
 * 使用DFS算法遍历矩阵
 * @param x 当前位置的行坐标
 * @param y 当前位置的列坐标
 * @param a 二维数组表示的矩阵
 */
void dfs(int x,int y,vector<vector<int>> a){
    int i;
    // 检查当前位置是否越界或已被访问
    if(x < 0 ||  x >= n || y < 0 || y >= n ||a[x][y] != 0){
        return;
    }
    // 标记当前位置为已访问
    a[x][y] = 1;
    // 遍历四个方向的相邻位置
    for(i = 0; i < 4 ; i ++ ){
        dfs(x + dx[i],y + dy[i],a);
    }
}
/**
 * 主函数，解决具体的問題
 */
void solve() {
    cin >> n; // 输入矩阵的维度
    vector<vector<int>> a(n,vector(n,0)); // 初始化矩阵
    int x;
    // 输入矩阵的初始状态
    for(int i = 0 ; i < n ; i++){
        for(int j = 0; j < n ; j ++){
            cin >> x;
            if(x == 0) a[i][j] = 0;
            else a[i][j] = 2;
        }
    }
    // 从(0,0)位置开始进行DFS遍历
    dfs(0,0,a);

    // 输出处理后的矩阵
    for(int i = 0;  i < n ;i ++){
        for(int j = 0 ; j < n ; j ++){
            if(a[i][j] == 0) cout << 2 <<" ";
            else cout << a[i][j] <<" ";
        }
        cout << "\n";
    }
}

int main() {
    ios::sync_with_stdio(false); // 提高速度
    cin.tie(nullptr); // 关闭输入输出同步
    solve(); // 调用解决问题的函数
    return 0;
}
